package main

import (
	"github.com/gin-gonic/gin"
	"log"
)

func middleware1(c *gin.Context) {
	log.Println("middleware in ....")
	log.Println("before next ....")
	c.Next()
	log.Println("next after .....")
	log.Println("middleware done....")
}
func middleware2(c *gin.Context) {
	log.Println("middleware in ....")
	log.Println("before next ....")
	c.Next()
	log.Println("next after .....")
	log.Println("middleware done....")
}
func main() {
	router := gin.Default()
	// 全局只用中间件，所有的调用都会被执行
	/*
		洋葱模型
		1.先执行middleware1函数中c.Next()之前的部分，
		2.再执行middleware2函数中c.Next()之前的部分，
		3.然后执行createGoods函数
		4.执行middleware2函数中c.Next()之后的部分
		5.再执行middleware1函数中c.Next()之前的部分
	*/
	router.Use(middleware1, middleware2)
	// 单个handler添加middleware
	router.POST("/user", createGoods)

	router.Run(":8083")
}

func createGoods(c *gin.Context) {

	log.Println("func in .....")
	k := c.GetInt("key") // 1000
	c.Set("key", k+2000)
	log.Println("func done.....")
}
